package com.sz.sidi.util;

 
/*
 * 创建日期 2006-5-20 TODO 要更改此生成的文件的模板，请转至 窗口 － 首选项 － Java － 代码样式 － 代码模板
 */
 

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Formate {

	public static final String dateTime = "0"; /* 转换为DateTime形式 */
	public static final String date = "1"; /* 转换为DateTime形式 */

	public static String decodeStr(String str) {
		String retValue = null;
		if (str == null)
			return null;
		try {
			retValue = new String(str.getBytes(), "iso-8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return retValue;
	}

	public static String encodeStr(String str, String encode) {
		String retValue = null;
		if (str == null)
			return null;
		try {
			retValue = new String(str.getBytes("8859_1"), encode);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return retValue;
	}

	public static String encodeStr(String str) {
		String retValue = null;
		if (str == null)
			return null;
		try {
			retValue = new String(str.getBytes("8859_1"), "gb2312");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return retValue;
	}

	/**
	 * <p>
	 * 功能：Object对象转换java.sql.Date对象
	 * </p>
	 * <p>
	 * 方法:ObjectToSqlDate()
	 * </p>
	 * <p>
	 * 说明：如果Object对象为空值,或者无法转换为java.sql.Date对象,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aObject Object 对象 2003-09-09 aDateType String 日期格式 Formate.dateTime或者Formate.date
	 * </p>
	 * <p>
	 * 返回值：java.sql.Date
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static java.sql.Date objectToSqlDate(Object aObject, String aDateType) {
		if (aObject == null)
			return null;
		java.sql.Date tempDate = null; /* 临时日期对象变量 */
		try {
			SimpleDateFormat formatter = null;
			if (aDateType.equals(Formate.dateTime)) {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			} else {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
			}
			String objectclass = aObject.getClass().getName();
			String tempstr;
			/* java.sql.Date */
			if (objectclass.toString().toLowerCase().equals("java.sql.date")) {
				tempstr = sqlDateToString((java.sql.Date) aObject, aDateType);
			} else if (objectclass.toString().toLowerCase().equals("java.util.date")) {
				/* java.util.Date */
				tempstr = utilDateToString((java.util.Date) aObject, aDateType);
			} else {
				tempstr = aObject.toString();
			}
			java.util.Date date = formatter.parse(tempstr);
			tempDate = new java.sql.Date(date.getTime());
		} catch (Exception e) {
			tempDate = null;
		}
		return tempDate;
	}

	/**
	 * <p>
	 * 功能：String对象转换为整型对象
	 * </p>
	 * <p>
	 * 方法:stringToInteger()
	 * </p>
	 * <p>
	 * 说明：如果String对象为空值,或者无法转换为Integer对象,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aString String String对象 "1234556"
	 * </p>
	 * <p>
	 * 返回值：Integer
	 * </p>
	 * <p>
	 * 创建时间：2006-09-22 20:13:00
	 * </p>
	 * <p>
	 * 创建人：ljp
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static Integer stringToInteger(String aString) {
		if (aString == null)
			return null;
		Integer tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				if (aString.equalsIgnoreCase("true"))
					tempInt = new Integer(1);
				else if (aString.equalsIgnoreCase("false"))
					tempInt = new Integer(0);
				else
					tempInt = Integer.valueOf(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		return tempInt;
	}

	public static Integer stringToInteger(String aString, int def) {
		if (aString == null)
			return null;
		Integer tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				if (aString.equalsIgnoreCase("true"))
					tempInt = new Integer(1);
				else if (aString.equalsIgnoreCase("false"))
					tempInt = new Integer(0);
				else
					tempInt = Integer.valueOf(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		if (tempInt == null)
			tempInt = new Integer(def);
		return tempInt;
	}

	public static Short stringToShort(String aString) {
		if (aString == null)
			return null;
		Short tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				if (aString.equalsIgnoreCase("true"))
					tempInt = new Short("1");
				else if (aString.equalsIgnoreCase("false"))
					tempInt = new Short("0");
				else
					tempInt = Short.valueOf(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		return tempInt;
	}

	public static Short stringToShort(String aString, int def) {
		if (aString == null)
			return null;
		Short tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				if (aString.equalsIgnoreCase("true"))
					tempInt = new Short("1");
				else if (aString.equalsIgnoreCase("false"))
					tempInt = new Short("0");
				else
					tempInt = Short.valueOf(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		if (tempInt == null)
			tempInt = new Short(String.valueOf(def));
		return tempInt;
	}

	/**
	 * <p>
	 * 功能：String对象转换为长整型对象
	 * </p>
	 * <p>
	 * 方法:stringToLong()
	 * </p>
	 * <p>
	 * 说明：如果String对象为空值,或者无法转换为Long对象,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aString String String对象 "1234556"
	 * </p>
	 * <p>
	 * 返回值：Long
	 * </p>
	 * <p>
	 * 创建时间：2006-09-22 20:13:00
	 * </p>
	 * <p>
	 * 创建人：ljp
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static Long stringToLong(String aString) {
		if (aString == null)
			return null;
		Long tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				tempInt = Long.valueOf(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		return tempInt;
	}

	public static Long stringToLong(String aString, long def) {
		if (aString == null)
			return null;
		Long tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				tempInt = Long.valueOf(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		if (tempInt == null)
			tempInt = new Long(def);
		return tempInt;
	}

	public static Double stringToDouble(String aString, double def) {
		if (aString == null)
			return null;
		Double result = null;
		try {
			if (!aString.equals("")) {
				result = Double.valueOf(aString);
			}
		} catch (Exception e) {
			result = null;
		}
		if (result == null)
			result = new Double(def);
		return result;
	}

	public static BigDecimal stringToDecimal(String aString) {
		if (aString == null)
			return null;
		BigDecimal tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				tempInt = new BigDecimal(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		return tempInt;
	}

	public static BigDecimal stringToDecimal(String aString, BigDecimal def) {
		if (aString == null)
			return def;
		BigDecimal tempInt = null; /* 临时整型对象变量 */
		try {
			if (!aString.equals("")) {
				tempInt = new BigDecimal(aString);
			}
		} catch (Exception e) {
			tempInt = null;
		}
		if (tempInt == null)
			tempInt = def;
		return tempInt;
	}

	/**
	 * <p>
	 * 功能：String对象转换成java.sql.Date对象
	 * </p>
	 * <p>
	 * 方法:stringToSqlDate()
	 * </p>
	 * <p>
	 * 说明：如果Integer对象为空值,或者无法转换为String对象,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aString String 字符对象 "2003-09-09" aDateType String 日期格式 Formate.dateTime或者Formate.date
	 * </p>
	 * <p>
	 * 返回值：String
	 * </p>
	 * <p>
	 * 创建时间：2006-09-22 20:27:00
	 * </p>
	 * <p>
	 * 创建人：ljp
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static java.sql.Date stringToSqlDate(String aString, String aDateType) {
		if (aString == null)
			return null;
		java.sql.Date tempDate = null; /* 临时日期对象变量 */
		try {
			SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			if (aDateType.equals(Formate.dateTime)) {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			} else {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
			}
			java.util.Date date = formatter.parse(aString);
			tempDate = new java.sql.Date(date.getTime());
		} catch (Exception e) {
			tempDate = null;
		}
		return tempDate;
	}

	/**
	 * <p>
	 * 功能：String对象转换成java.util.Date对象
	 * </p>
	 * <p>
	 * 方法:stringToUtilDate()
	 * </p>
	 * <p>
	 * 说明：如果Integer对象为空值,或者无法转换为String对象,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aString String 字符对象 "2003-09-09" aDateType String 日期格式 Formate.dateTime或者Formate.date
	 * </p>
	 * <p>
	 * 返回值：String
	 * </p>
	 * <p>
	 * 创建时间：2006-09-22 20:27:00
	 * </p>
	 * <p>
	 * 创建人：ljp
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static java.util.Date stringToUtilDate(String aString, String aDateType) {
		if (aString == null)
			return null;
		java.util.Date tempDate = null; /* 临时日期对象变量 */
		try {
			SimpleDateFormat formatter = null;
			if (aDateType.equals(Formate.dateTime)) {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			} else {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
			}
			tempDate = formatter.parse(aString);
		} catch (Exception e) {
			tempDate = null;
		}
		return tempDate;
	}

	/**
	 * <p>
	 * 功能：java.util.Date对象转换成String对象
	 * </p>
	 * <p>
	 * 方法:utilDateToString()
	 * </p>
	 * <p>
	 * 说明：转换错误,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aDate java.util.Date 字符对象 2003-09-09 aDateType String 日期格式 Formate.dateTime或者Formate.date
	 * </p>
	 * <p>
	 * 返回值：java.sql.Date
	 * </p>
	 * <p>
	 * 创建时间：2006-09-21 21:38:00
	 * </p>
	 * <p>
	 * 创建人：ljp
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static String utilDateToString(java.util.Date aDate, String aDateType) {
		if (aDate == null)
			return null;
		String tempStr = null; /* 临时日期对象变量 */
		try {
			SimpleDateFormat formatter = null;
			if (aDateType.equals(Formate.dateTime)) {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			} else {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
			}
			tempStr = formatter.format(aDate);
		} catch (Exception e) {
			tempStr = null;
		}
		return tempStr;
	}

	/**
	 * <p>
	 * 功能：java.sql.Date对象转换成String对象
	 * </p>
	 * <p>
	 * 方法:sqlDateToString()
	 * </p>
	 * <p>
	 * 说明：转换错误,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aDate java.sql.Date 字符对象 2003-09-09 aDateType String 日期格式 Formate.dateTime或者Formate.date
	 * </p>
	 * <p>
	 * 返回值：java.sql.Date
	 * </p>
	 * <p>
	 * 创建时间：2006-09-22 21:52:00
	 * </p>
	 * <p>
	 * 创建人：ljp
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static String sqlDateToString(java.sql.Date aDate, String aDateType) {
		if (aDate == null)
			return null;
		String tempStr = null; /* 临时日期对象变量 */
		try {
			SimpleDateFormat formatter = null;
			if (aDateType.equals(Formate.dateTime)) {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			} else {
				formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
			}
			tempStr = formatter.format(aDate);
		} catch (Exception e) {
			tempStr = null;
		}
		return tempStr;
	}

	public static String dateToString(Date date) {
		String retValue = null;
		retValue = date.toString();
		return retValue;
	}

	/**
	 * 格式化日期
	 * 
	 * @param formart
	 * @return 格式化后的日期字符串
	 */
	public static String getDateFormatStr(String formart) {
		return new SimpleDateFormat(formart).format(new java.util.Date());
	}

	/**
	 * <p>
	 * 功能：Object对象转换String对象
	 * </p>
	 * <p>
	 * 方法:objectToString(Object aObject)
	 * </p>
	 * <p>
	 * 说明：如果Object对象为空值,或者无法转换为String对象,将返回为null
	 * </p>
	 * <p>
	 * 参数：参数名 类型 参数中文意思 例如 aObject Object 对象 123455,"123455"
	 * </p>
	 * <p>
	 * 返回值：String
	 * </p>
	 * <p>
	 * 创建时间：2006-09-22
	 * </p>
	 * <p>
	 * 创建人：ljp
	 * </p>
	 * <p>
	 * 最后修改时间：(空)
	 * </p>
	 * <p>
	 * 修改说明：(空)
	 * </p>
	 */
	public static String objectToString(Object aObject) {
		if (aObject == null)
			return null;
		if (aObject.equals("null"))
			return null;
		String tempStr = null; /* 临时字符对象变量 */
		try {
			if (aObject instanceof Integer) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof Short) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof Long) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof Double) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof Float) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof BigDecimal) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof BigInteger) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof String) {
				tempStr = (String) aObject;
			} else if (aObject instanceof Boolean) {
				tempStr = String.valueOf(aObject);
			} else if (aObject instanceof Date) {
				tempStr = utilDateToString((Date) aObject, Formate.dateTime);
			} else
				tempStr = aObject.toString();

			if (tempStr.equals("")) {
				tempStr = null;
			}
		} catch (Exception e) {
			tempStr = null;
		}
		return tempStr;
	}

	private static DecimalFormat decimalFormat = new DecimalFormat("000000");

	/**
	 * 格式化数据.
	 * 
	 * @param number
	 *            要格式化的数字
	 * @return 格式7位长度的字符串
	 */
	public static String format(Integer number) {
		try {
			return decimalFormat.format(number).toString();
		} catch (Exception e) {

		}
		return "";
	}

	/**
	 * 格式double
	 * 
	 * @param number
	 *            数据
	 * @param format
	 *            风格
	 * @return 格式话字符串
	 */
//	public static String format(double number, String format) {
//		if (!GlobalFun.hasValue(format))
//			format = "0.0000";
//		try {
//			return new DecimalFormat(format).format(number);
//		} catch (Exception e) {
//
//		}
//		return "";
//	}
	
//	public static String format(double number, String format) {
//	if (!GlobalFun.hasValue(format))
//		format = "0.0000";
//	try {
//		return new DecimalFormat(format).format(number);
//	} catch (Exception e) {
//
//	}
//	return "";
//}
	
	public static String format(double number, String format) {
		if (!GlobalFun.hasValue(format))
			format = "#.######";
		try {
			return new DecimalFormat(format).format(number);
		} catch (Exception e) {

		}
		return "";
	}
	
	

	public static boolean hasFullSize(String inStr) {
		if (inStr.getBytes().length != inStr.length()) {
			return true;
		}
		return false;
	}

	// 转换函数：String-->short[]
	public static short[] TransformSA(String strArray) {
		if (strArray==null)
			return new short[0];
		short[] shortArray = new short[strArray.length()];
		for (int i = 0; i < strArray.length(); i++) {
			shortArray[i] = TransCharToShort(strArray.charAt(i));
		}
		return shortArray;
	}

	// 转换函数：short[]-->String
	public static String TransformAS(short[] sArray) {
		String result=null;
		if (sArray!=null){
			char[] charArray = new char[sArray.length];
			short sTemp;
			for (int i = 0; i < sArray.length; i++) {
				charArray[i] = TransShortToChar(sArray[i]);
				// System.out.println("字符"+i+":" + charArray[i] + "" +(int)charArray[i]);
			}
			result=new String(charArray);
		}
		return result;
	}

	// 转换函数：char-->short
	public static short TransCharToShort(char c) {
		 char[] t = new char[1];
	      t[0]=c;
	      String strTemp = new String(t);
	      byte[] cc = null;
	      try{
	    	 cc= strTemp.getBytes("GB2312");
	      } catch(UnsupportedEncodingException e){
	    	  e.printStackTrace();
	      }
	      if(cc.length==1)
	      {
	          return (short)(cc[0]<0 ? (cc[0]+256):cc[0]);
	      }
	      else
	      {
	          int v1 = cc[0]<0 ? (cc[0]+256):cc[0];
	          int v2 = cc[1]<0 ? (cc[1]+256):cc[1];
	          return (short)(v1*256+v2);
	      }
	}

	// 转换函数：short-->char
	public static char TransShortToChar(short sTemp) {
		  char result = 0;
	      if(sTemp>=0)
	          return (char)sTemp;
	      else
	      {
	          byte[] b=new byte[2];
	          b[0]= (byte)(sTemp>>8);
	          b[1]= (byte)(sTemp);
	          try{
	        	  String temp  = new String(b,"GB2312");
	        	  result =  temp.charAt(0);
	          }catch(UnsupportedEncodingException e){
	        	  e.printStackTrace();
	          }
	      }
	      return result;
	}
}
